Array.prototype.flat1 = function(num = 1) {
  if (!Number(num)) {
    return this
  }
  let result = []

  this.forEach(item => {
    if (Array.isArray(item) && num > 0) {
      result = [...result, ...item.flat1(num -1)]
    } else {
      result.push(item)
    }
  })

  return result
}

// Array.prototype.myFlat = function (dep = 1) {
//   if (!Number(dep) || Number(dep) < 0) {
//     return this
//   }
//   // 声明一个新数组
//   let arr = this
//   return dep > 0
//     ? arr.reduce(
//         (pre, cur) =>
//           pre.concat(Array.isArray(cur) ? cur.myFlat(--dep) : cur),
//         []
//       )
//     : arr.slice();
// }

Array.prototype.myFlat = function (dep = 1) {
  // 声明一个新数组
  let result = this
  // // 当原数组内存在数组并且层级dep大于时循环
  while (result.some(Array.isArray) && dep > 0) {
    // 连接数组，并去除空值
    result = [].concat(...result.filter((item) => item))
    dep--
  }
  return result
}

const oldArr = [1,,[2,3,[4,5,[6,7]],9],8]
const arr1 = oldArr.flat(2)
const arr2 = oldArr.myFlat(2)
console.log(oldArr)
console.log(arr1)
console.log(arr2)